Embodiments of the present invention generally relate to computer systems, and more specifically to techniques for client redirection and load balancing in a storage network.
File systems are most commonly stored on random access storage devices (like spinning magnetic disks). Traditionally these disks were directly attached to a single computer, via a disk controller. Many years ago it was the case that the files on a disk could only be accessed by programs that were running on the computer to which the disks were attached.
The advent of standardized remote file access protocols (e.g. the Network File System and the Common Internet File System) have made it possible for clients to access files on other computers. In order to provide scalability in the size and bandwidth of a distributed file system, it is necessary to spread the managed files across multiple storage nodes. Spreading file systems across multiple storage nodes can greatly improve scalability, availability, and performance, but it traditionally comes at a significant complexity cost for use and management (because users and system managers must be able to figure out which files are stored on which file servers).
Recent products attempt to eliminate this complexity by providing a single global virtual name space that hides the details of which files are stored on which file servers. These products fall into two general architectures: single point of service and multiple point of service. In single point of service architectures, all clients connect to a single server, which forwards requests to the server that can best handle them. There are two fundamental problems with this architecture. The single server quickly becomes a bottleneck, limiting both performance and capacity, and the relaying of messages from the front-end server to the ultimate storage site adds overhead to every transaction.
In single point of service architectures, all clients connect to a single server, which forwards requests to the server that can best handle them. There are two fundamental problems with this architecture. The single server quickly becomes a bottleneck, limiting both performance and capacity, and the relaying of messages from the front-end server to the ultimate storage site adds overhead to every transaction.
In multiple point of service architectures clients are somehow redirected to one of several available servers. Dividing traffic among many servers addresses the basic performance and scalability problem, but unless the chosen server is one that can directly handle the client requests, the overhead of relaying requests to the most appropriate server remains. Unfortunately, existing load balancing solutions rely on overly simplistic techniques (like random and round robin) to select a server for a particular client . . . and arbitrary choices seldom turn out to be the best.
There are many network based load balancing systems and appliances that are in use today. There are the generic techniques that are available from most DNS (Domain Name System) servers that basically route a client session request to a server based on either a random or round-robin algorithm. These mechanisms fall short because they do not account for any information from the actual target servers that are being used.
There are also in-band software or hardware based network load balancers who intercept packets from clients and route them to a number of back-end servers. The parameters commonly used to make this routing decision are round-robin, least connections, etc. These parameters are obtained from the network and the load balancer itself. These mechanisms fall short because the load balancer does not know nor can it gather information about contents, loads, or capacities of the servers for which it is front-ending.
Another problem with in-band load balancers is that they add considerable cost as well as components and processing steps to the primary data path. As a result of which they limit the aggregate throughput available to the back-end storage nodes and introduce additional delays to every request and response.